package com.kurt.repository;

import com.kurt.entity.SysConfig;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * 系统配置Repository接口
 * 提供系统配置数据访问方法
 */
@Repository
public interface SysConfigRepository extends JpaRepository<SysConfig, Long>, JpaSpecificationExecutor<SysConfig> {

    /**
     * 根据配置键名查找配置
     *
     * @param configKey 配置键名
     * @return 配置信息
     */
    Optional<SysConfig> findByConfigKey(String configKey);

    /**
     * 根据配置键名查找配置（忽略大小写）
     *
     * @param configKey 配置键名
     * @return 配置信息
     */
    Optional<SysConfig> findByConfigKeyIgnoreCase(String configKey);

    /**
     * 根据配置名称模糊查询
     *
     * @param configName 配置名称
     * @return 配置列表
     */
    List<SysConfig> findByConfigNameContaining(String configName);

    /**
     * 根据配置类型查找配置
     *
     * @param configType 配置类型
     * @return 配置列表
     */
    List<SysConfig> findByConfigType(String configType);

    /**
     * 根据状态查找配置
     *
     * @param status 状态
     * @return 配置列表
     */
    List<SysConfig> findByStatus(Integer status);

    /**
     * 检查配置键名是否存在
     *
     * @param configKey 配置键名
     * @return 是否存在
     */
    boolean existsByConfigKey(String configKey);

    /**
     * 检查配置键名是否存在（排除指定ID）
     *
     * @param configKey 配置键名
     * @param excludeId 排除的ID
     * @return 是否存在
     */
    boolean existsByConfigKeyAndIdNot(String configKey, Long excludeId);

}
